Teacher Forcing(교사 강요)은
RNN이나 GPT와 같은 Auto-regressive(자기회귀) 모델을 위한 훈련(Training) 기법입니다.
Auto-regressive 모델은 이전 시점(t-1)의 출력값을 현재 시점(t)의 입력값으로 사용하여 순차적으로 결과를 생성합니다.
하지만 훈련 초기에 모델의 예측은 부정확할 가능성이 높습니다. 만약 이 부정확한 예측값을 다음 입력으로 사용하면, 첫 단추를 잘못 끼운 것처럼 오류가 연쇄적으로 누적되어 훈련이 불안정해집니다.
Teacher Forcing은 이 문제를 해결하기 위해, 훈련 과정에서 모델이 이전 시점에 무엇을 예측했는지와 상관없이, 다음 시점의 입력으로 항상 '실제 정답(Ground Truth)' 단어를 강제로 넣어주는 방식입니다.
모델은 현재 입력을 보고 다음 단어를 예측(output)하고, 이 예측값은 실제 정답과 비교되어 손실(Loss)이 계산됩니다. 이 손실을 통해 모델의 가중치가 업데이트(학습)됩니다.
다음 단어를 예측하기 위한 입력(input)으로는, 모델이 방금 예측한 값(오답일 수 있는)을 무시하고 '실제 정답' 단어를 강제로 사용합니다.
이를 통해 모델은 매 스텝마다 정답 경로 위에서 안정적으로 학습할 수 있으며,
모든 타임스텝의 계산을 병렬적으로 처리할 수 있어 학습 속도가 매우 빨라집니다.
Teacher Forcing은 효율적인 훈련을 가능하게 하지만, 근본적인 문제점을 야기합니다.
바로 학습 환경과 실제 추론 환경이 달라지는 것입니다.
모델은 Teacher Forcing 덕분에 항상 완벽한 정답 문장에만 노출됩니다.
마치 모범 답안지만 보고 공부하는 것과 같습니다.
이때는 forward() 함수가 사용됩니다.
실제 문장을 생성할 때는 정답이 없으므로, 모델 자신이 생성한 (불완전할 수 있는) 단어를 다음 입력으로 사용해야 합니다.
이때는 generate() 와 같은 별도의 함수가 필요합니다.
이러한 불일치를 Exposure Bias(노출 편향)라고 합니다. 훈련 중에는 한 번도 경험해보지 못한, 자기 스스로 만든 불완전한 데이터에 노출되면서 예측 오류가 시작되고, 이 오류가 다음 예측에 계속 누적되어 결과물의 품질이 저하될 수 있습니다.
이 때문에 개발자는 학습용 forward() 함수와 추론용 generate() 함수를 반드시 다르게 구현해야 합니다.
두 개념은 생성 모델의 디코더(Decoder)에서 함께 사용되지만, 완전히 다른 문제를 해결하는 독립적인 요소입니다.
모델의 '구조(Architecture)’에 해당하며, '입력(Source) 문장'에서 현재 예측에 중요한 정보가 무엇인지 알려줍니다.
모델의 '훈련 기법(Technique)'이며, '출력(Target) 문장'을 만들 때 이전 스텝의 정보를 무엇으로 할지 결정합니다.
어텐션을 사용하는 Seq2Seq 모델의 디코더가 단어를 생성하는 순간을 예로 들면 다음과 같습니다.
(1). Teacher Forcing의 역할
현재 단어를 예측하기 위해, 이전 시점의 입력으로 실제 정답 단어를 공급합니다.
(2). Attention의 역할
디코더는 (1)에서 받은 정보(은닉 상태)를 바탕으로, 전체 입력 문장을 다시 참조합니다. 그리고 현재 단어를 예측하는 데 가장 관련성이 높은 입력 단어에 '집중'하여 핵심 문맥 정보를 가져옵니다.
(3). 최종 예측
디코더는 [Teacher Forcing이 준 이전 정답]과 [Attention이 찾아낸 중요 입력 정보]를 모두 종합하여
현재 단어를 예측합니다.